use ::libc;
extern "C" {
    pub type event_base;
    pub type evbuffer;
    pub type bufferevent_ops;
    pub type args;
    pub type tmuxpeer;
    pub type hyperlinks;
    pub type screen_write_cline;
    pub type screen_sel;
    pub type screen_titles;
    pub type environ;
    pub type options;
    pub type format_tree;
    pub type input_ctx;
    pub type cmds;
    pub type tty_key;
    pub type tty_code;
    pub type format_job_tree;
    pub type control_state;
    pub type cmdq_list;
    pub type cmd;
    pub type cmdq_item;
    pub type options_entry;
    fn strtol(_: *const libc::c_char, _: *mut *mut libc::c_char, _: libc::c_int) -> libc::c_long;
    fn free(_: *mut libc::c_void);
    fn strcmp(_: *const libc::c_char, _: *const libc::c_char) -> libc::c_int;
    fn xstrdup(_: *const libc::c_char) -> *mut libc::c_char;
    fn checkshell(_: *const libc::c_char) -> libc::c_int;
    fn format_free(_: *mut format_tree);
    fn format_add(_: *mut format_tree, _: *const libc::c_char, _: *const libc::c_char, _: ...);
    fn format_expand(_: *mut format_tree, _: *const libc::c_char) -> *mut libc::c_char;
    fn format_single_from_target(_: *mut cmdq_item, _: *const libc::c_char) -> *mut libc::c_char;
    fn format_create_from_target(_: *mut cmdq_item) -> *mut format_tree;
    fn options_table_entry(_: *mut options_entry) -> *const options_table_entry;
    fn options_get(_: *mut options, _: *const libc::c_char) -> *mut options_entry;
    fn options_get_string(_: *mut options, _: *const libc::c_char) -> *const libc::c_char;
    fn options_get_number(_: *mut options, _: *const libc::c_char) -> libc::c_longlong;
    fn options_find_choice(
        _: *const options_table_entry,
        _: *const libc::c_char,
        _: *mut *mut libc::c_char,
    ) -> libc::c_int;
    fn environ_create() -> *mut environ;
    fn environ_free(_: *mut environ);
    fn environ_put(_: *mut environ, _: *const libc::c_char, _: libc::c_int);
    fn tty_window_offset(
        _: *mut tty,
        _: *mut u_int,
        _: *mut u_int,
        _: *mut u_int,
        _: *mut u_int,
    ) -> libc::c_int;
    fn args_to_vector(_: *mut args, _: *mut libc::c_int, _: *mut *mut *mut libc::c_char);
    fn args_has(_: *mut args, _: u_char) -> libc::c_int;
    fn args_get(_: *mut args, _: u_char) -> *const libc::c_char;
    fn args_count(_: *mut args) -> u_int;
    fn args_string(_: *mut args, _: u_int) -> *const libc::c_char;
    fn args_first_value(_: *mut args, _: u_char) -> *mut args_value;
    fn args_next_value(_: *mut args_value) -> *mut args_value;
    fn args_strtonum(
        _: *mut args,
        _: u_char,
        _: libc::c_longlong,
        _: libc::c_longlong,
        _: *mut *mut libc::c_char,
    ) -> libc::c_longlong;
    fn args_percentage(
        _: *mut args,
        _: u_char,
        _: libc::c_longlong,
        _: libc::c_longlong,
        _: libc::c_longlong,
        _: *mut *mut libc::c_char,
    ) -> libc::c_longlong;
    fn cmd_append_argv(_: *mut libc::c_int, _: *mut *mut *mut libc::c_char, _: *const libc::c_char);
    fn cmd_free_argv(_: libc::c_int, _: *mut *mut libc::c_char);
    fn cmd_get_args(_: *mut cmd) -> *mut args;
    fn cmdq_get_target_client(_: *mut cmdq_item) -> *mut client;
    fn cmdq_get_target(_: *mut cmdq_item) -> *mut cmd_find_state;
    fn cmdq_get_event(_: *mut cmdq_item) -> *mut key_event;
    fn cmdq_error(_: *mut cmdq_item, _: *const libc::c_char, _: ...);
    fn key_string_lookup_string(_: *const libc::c_char) -> key_code;
    fn server_client_clear_overlay(_: *mut client);
    fn status_at_line(_: *mut client) -> libc::c_int;
    fn status_line_size(_: *mut client) -> u_int;
    fn server_client_get_cwd(_: *mut client, _: *mut session) -> *const libc::c_char;
    fn menu_create(_: *const libc::c_char) -> *mut menu;
    fn log_debug(_: *const libc::c_char, _: ...);
    fn popup_display(
        _: libc::c_int,
        _: box_lines,
        _: *mut cmdq_item,
        _: u_int,
        _: u_int,
        _: u_int,
        _: u_int,
        _: *mut environ,
        _: *const libc::c_char,
        _: libc::c_int,
        _: *mut *mut libc::c_char,
        _: *const libc::c_char,
        _: *const libc::c_char,
        _: *mut client,
        _: *mut session,
        _: *const libc::c_char,
        _: *const libc::c_char,
        _: popup_close_cb,
        _: *mut libc::c_void,
    ) -> libc::c_int;
    fn menu_add_item(
        _: *mut menu,
        _: *const menu_item,
        _: *mut cmdq_item,
        _: *mut client,
        _: *mut cmd_find_state,
    );
    fn menu_free(_: *mut menu);
    fn menu_display(
        _: *mut menu,
        _: libc::c_int,
        _: libc::c_int,
        _: *mut cmdq_item,
        _: u_int,
        _: u_int,
        _: *mut client,
        _: box_lines,
        _: *const libc::c_char,
        _: *const libc::c_char,
        _: *const libc::c_char,
        _: *mut cmd_find_state,
        _: menu_choice_cb,
        _: *mut libc::c_void,
    ) -> libc::c_int;
}
pub type __u_char = libc::c_uchar;
pub type __u_short = libc::c_ushort;
pub type __u_int = libc::c_uint;
pub type __uint8_t = libc::c_uchar;
pub type __uint64_t = libc::c_ulong;
pub type __pid_t = libc::c_int;
pub type __time_t = libc::c_long;
pub type __suseconds_t = libc::c_long;
pub type u_char = __u_char;
pub type u_short = __u_short;
pub type u_int = __u_int;
pub type pid_t = __pid_t;
pub type time_t = __time_t;
pub type size_t = libc::c_ulong;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct timeval {
    pub tv_sec: __time_t,
    pub tv_usec: __suseconds_t,
}
pub type cc_t = libc::c_uchar;
pub type speed_t = libc::c_uint;
pub type tcflag_t = libc::c_uint;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct termios {
    pub c_iflag: tcflag_t,
    pub c_oflag: tcflag_t,
    pub c_cflag: tcflag_t,
    pub c_lflag: tcflag_t,
    pub c_line: cc_t,
    pub c_cc: [cc_t; 32],
    pub c_ispeed: speed_t,
    pub c_ospeed: speed_t,
}
pub type uint8_t = __uint8_t;
pub type uint64_t = __uint64_t;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct event {
    pub ev_evcallback: event_callback,
    pub ev_timeout_pos: C2RustUnnamed_4,
    pub ev_fd: libc::c_int,
    pub ev_base: *mut event_base,
    pub ev_: C2RustUnnamed,
    pub ev_events: libc::c_short,
    pub ev_res: libc::c_short,
    pub ev_timeout: timeval,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub union C2RustUnnamed {
    pub ev_io: C2RustUnnamed_2,
    pub ev_signal: C2RustUnnamed_0,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_0 {
    pub ev_signal_next: C2RustUnnamed_1,
    pub ev_ncalls: libc::c_short,
    pub ev_pncalls: *mut libc::c_short,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_1 {
    pub le_next: *mut event,
    pub le_prev: *mut *mut event,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_2 {
    pub ev_io_next: C2RustUnnamed_3,
    pub ev_timeout: timeval,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_3 {
    pub le_next: *mut event,
    pub le_prev: *mut *mut event,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub union C2RustUnnamed_4 {
    pub ev_next_with_common_timeout: C2RustUnnamed_5,
    pub min_heap_idx: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_5 {
    pub tqe_next: *mut event,
    pub tqe_prev: *mut *mut event,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct event_callback {
    pub evcb_active_next: C2RustUnnamed_7,
    pub evcb_flags: libc::c_short,
    pub evcb_pri: uint8_t,
    pub evcb_closure: uint8_t,
    pub evcb_cb_union: C2RustUnnamed_6,
    pub evcb_arg: *mut libc::c_void,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub union C2RustUnnamed_6 {
    pub evcb_callback:
        Option<unsafe extern "C" fn(libc::c_int, libc::c_short, *mut libc::c_void) -> ()>,
    pub evcb_selfcb: Option<unsafe extern "C" fn(*mut event_callback, *mut libc::c_void) -> ()>,
    pub evcb_evfinalize: Option<unsafe extern "C" fn(*mut event, *mut libc::c_void) -> ()>,
    pub evcb_cbfinalize: Option<unsafe extern "C" fn(*mut event_callback, *mut libc::c_void) -> ()>,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_7 {
    pub tqe_next: *mut event_callback,
    pub tqe_prev: *mut *mut event_callback,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct bufferevent {
    pub ev_base: *mut event_base,
    pub be_ops: *const bufferevent_ops,
    pub ev_read: event,
    pub ev_write: event,
    pub input: *mut evbuffer,
    pub output: *mut evbuffer,
    pub wm_read: event_watermark,
    pub wm_write: event_watermark,
    pub readcb: bufferevent_data_cb,
    pub writecb: bufferevent_data_cb,
    pub errorcb: bufferevent_event_cb,
    pub cbarg: *mut libc::c_void,
    pub timeout_read: timeval,
    pub timeout_write: timeval,
    pub enabled: libc::c_short,
}
pub type bufferevent_event_cb =
    Option<unsafe extern "C" fn(*mut bufferevent, libc::c_short, *mut libc::c_void) -> ()>;
pub type bufferevent_data_cb =
    Option<unsafe extern "C" fn(*mut bufferevent, *mut libc::c_void) -> ()>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct event_watermark {
    pub low: size_t,
    pub high: size_t,
}
pub type bitstr_t = libc::c_uchar;
pub type msgtype = libc::c_uint;
pub const MSG_READ_CANCEL: msgtype = 307;
pub const MSG_WRITE_CLOSE: msgtype = 306;
pub const MSG_WRITE_READY: msgtype = 305;
pub const MSG_WRITE: msgtype = 304;
pub const MSG_WRITE_OPEN: msgtype = 303;
pub const MSG_READ_DONE: msgtype = 302;
pub const MSG_READ: msgtype = 301;
pub const MSG_READ_OPEN: msgtype = 300;
pub const MSG_FLAGS: msgtype = 218;
pub const MSG_EXEC: msgtype = 217;
pub const MSG_WAKEUP: msgtype = 216;
pub const MSG_UNLOCK: msgtype = 215;
pub const MSG_SUSPEND: msgtype = 214;
pub const MSG_OLDSTDOUT: msgtype = 213;
pub const MSG_OLDSTDIN: msgtype = 212;
pub const MSG_OLDSTDERR: msgtype = 211;
pub const MSG_SHUTDOWN: msgtype = 210;
pub const MSG_SHELL: msgtype = 209;
pub const MSG_RESIZE: msgtype = 208;
pub const MSG_READY: msgtype = 207;
pub const MSG_LOCK: msgtype = 206;
pub const MSG_EXITING: msgtype = 205;
pub const MSG_EXITED: msgtype = 204;
pub const MSG_EXIT: msgtype = 203;
pub const MSG_DETACHKILL: msgtype = 202;
pub const MSG_DETACH: msgtype = 201;
pub const MSG_COMMAND: msgtype = 200;
pub const MSG_IDENTIFY_TERMINFO: msgtype = 112;
pub const MSG_IDENTIFY_LONGFLAGS: msgtype = 111;
pub const MSG_IDENTIFY_STDOUT: msgtype = 110;
pub const MSG_IDENTIFY_FEATURES: msgtype = 109;
pub const MSG_IDENTIFY_CWD: msgtype = 108;
pub const MSG_IDENTIFY_CLIENTPID: msgtype = 107;
pub const MSG_IDENTIFY_DONE: msgtype = 106;
pub const MSG_IDENTIFY_ENVIRON: msgtype = 105;
pub const MSG_IDENTIFY_STDIN: msgtype = 104;
pub const MSG_IDENTIFY_OLDCWD: msgtype = 103;
pub const MSG_IDENTIFY_TTYNAME: msgtype = 102;
pub const MSG_IDENTIFY_TERM: msgtype = 101;
pub const MSG_IDENTIFY_FLAGS: msgtype = 100;
pub const MSG_VERSION: msgtype = 12;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct client {
    pub name: *const libc::c_char,
    pub peer: *mut tmuxpeer,
    pub queue: *mut cmdq_list,
    pub windows: client_windows,
    pub control_state: *mut control_state,
    pub pause_age: u_int,
    pub pid: pid_t,
    pub fd: libc::c_int,
    pub out_fd: libc::c_int,
    pub event: event,
    pub retval: libc::c_int,
    pub creation_time: timeval,
    pub activity_time: timeval,
    pub last_activity_time: timeval,
    pub environ: *mut environ,
    pub jobs: *mut format_job_tree,
    pub title: *mut libc::c_char,
    pub path: *mut libc::c_char,
    pub cwd: *const libc::c_char,
    pub term_name: *mut libc::c_char,
    pub term_features: libc::c_int,
    pub term_type: *mut libc::c_char,
    pub term_caps: *mut *mut libc::c_char,
    pub term_ncaps: u_int,
    pub ttyname: *mut libc::c_char,
    pub tty: tty,
    pub written: size_t,
    pub discarded: size_t,
    pub redraw: size_t,
    pub repeat_timer: event,
    pub click_timer: event,
    pub click_button: u_int,
    pub click_event: mouse_event,
    pub status: status_line,
    pub flags: uint64_t,
    pub exit_type: C2RustUnnamed_30,
    pub exit_msgtype: msgtype,
    pub exit_session: *mut libc::c_char,
    pub exit_message: *mut libc::c_char,
    pub keytable: *mut key_table,
    pub last_key: key_code,
    pub redraw_panes: uint64_t,
    pub redraw_scrollbars: uint64_t,
    pub message_ignore_keys: libc::c_int,
    pub message_ignore_styles: libc::c_int,
    pub message_string: *mut libc::c_char,
    pub message_timer: event,
    pub prompt_string: *mut libc::c_char,
    pub prompt_buffer: *mut utf8_data,
    pub prompt_last: *mut libc::c_char,
    pub prompt_index: size_t,
    pub prompt_inputcb: prompt_input_cb,
    pub prompt_freecb: prompt_free_cb,
    pub prompt_data: *mut libc::c_void,
    pub prompt_hindex: [u_int; 4],
    pub prompt_mode: C2RustUnnamed_27,
    pub prompt_saved: *mut utf8_data,
    pub prompt_flags: libc::c_int,
    pub prompt_type: prompt_type,
    pub prompt_cursor: libc::c_int,
    pub session: *mut session,
    pub last_session: *mut session,
    pub references: libc::c_int,
    pub pan_window: *mut libc::c_void,
    pub pan_ox: u_int,
    pub pan_oy: u_int,
    pub overlay_check: overlay_check_cb,
    pub overlay_mode: overlay_mode_cb,
    pub overlay_draw: overlay_draw_cb,
    pub overlay_key: overlay_key_cb,
    pub overlay_free: overlay_free_cb,
    pub overlay_resize: overlay_resize_cb,
    pub overlay_data: *mut libc::c_void,
    pub overlay_timer: event,
    pub files: client_files,
    pub clipboard_panes: *mut u_int,
    pub clipboard_npanes: u_int,
    pub entry: C2RustUnnamed_8,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_8 {
    pub tqe_next: *mut client,
    pub tqe_prev: *mut *mut client,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct client_files {
    pub rbh_root: *mut client_file,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct client_file {
    pub c: *mut client,
    pub peer: *mut tmuxpeer,
    pub tree: *mut client_files,
    pub references: libc::c_int,
    pub stream: libc::c_int,
    pub path: *mut libc::c_char,
    pub buffer: *mut evbuffer,
    pub event: *mut bufferevent,
    pub fd: libc::c_int,
    pub error: libc::c_int,
    pub closed: libc::c_int,
    pub cb: client_file_cb,
    pub data: *mut libc::c_void,
    pub entry: C2RustUnnamed_9,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_9 {
    pub rbe_left: *mut client_file,
    pub rbe_right: *mut client_file,
    pub rbe_parent: *mut client_file,
    pub rbe_color: libc::c_int,
}
pub type client_file_cb = Option<
    unsafe extern "C" fn(
        *mut client,
        *const libc::c_char,
        libc::c_int,
        libc::c_int,
        *mut evbuffer,
        *mut libc::c_void,
    ) -> (),
>;
pub type overlay_resize_cb = Option<unsafe extern "C" fn(*mut client, *mut libc::c_void) -> ()>;
pub type overlay_free_cb = Option<unsafe extern "C" fn(*mut client, *mut libc::c_void) -> ()>;
pub type overlay_key_cb =
    Option<unsafe extern "C" fn(*mut client, *mut libc::c_void, *mut key_event) -> libc::c_int>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct key_event {
    pub key: key_code,
    pub m: mouse_event,
    pub buf: *mut libc::c_char,
    pub len: size_t,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct mouse_event {
    pub valid: libc::c_int,
    pub ignore: libc::c_int,
    pub key: key_code,
    pub statusat: libc::c_int,
    pub statuslines: u_int,
    pub x: u_int,
    pub y: u_int,
    pub b: u_int,
    pub lx: u_int,
    pub ly: u_int,
    pub lb: u_int,
    pub ox: u_int,
    pub oy: u_int,
    pub s: libc::c_int,
    pub w: libc::c_int,
    pub wp: libc::c_int,
    pub sgr_type: u_int,
    pub sgr_b: u_int,
}
pub type key_code = libc::c_ulonglong;
pub type overlay_draw_cb =
    Option<unsafe extern "C" fn(*mut client, *mut libc::c_void, *mut screen_redraw_ctx) -> ()>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct screen_redraw_ctx {
    pub c: *mut client,
    pub statuslines: u_int,
    pub statustop: libc::c_int,
    pub pane_status: libc::c_int,
    pub pane_lines: pane_lines,
    pub pane_scrollbars: libc::c_int,
    pub pane_scrollbars_pos: libc::c_int,
    pub no_pane_gc: grid_cell,
    pub no_pane_gc_set: libc::c_int,
    pub sx: u_int,
    pub sy: u_int,
    pub ox: u_int,
    pub oy: u_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct grid_cell {
    pub data: utf8_data,
    pub attr: u_short,
    pub flags: u_char,
    pub fg: libc::c_int,
    pub bg: libc::c_int,
    pub us: libc::c_int,
    pub link: u_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct utf8_data {
    pub data: [u_char; 21],
    pub have: u_char,
    pub size: u_char,
    pub width: u_char,
}
pub type pane_lines = libc::c_uint;
pub const PANE_LINES_NUMBER: pane_lines = 4;
pub const PANE_LINES_SIMPLE: pane_lines = 3;
pub const PANE_LINES_HEAVY: pane_lines = 2;
pub const PANE_LINES_DOUBLE: pane_lines = 1;
pub const PANE_LINES_SINGLE: pane_lines = 0;
pub type overlay_mode_cb = Option<
    unsafe extern "C" fn(*mut client, *mut libc::c_void, *mut u_int, *mut u_int) -> *mut screen,
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct screen {
    pub title: *mut libc::c_char,
    pub path: *mut libc::c_char,
    pub titles: *mut screen_titles,
    pub grid: *mut grid,
    pub cx: u_int,
    pub cy: u_int,
    pub cstyle: screen_cursor_style,
    pub default_cstyle: screen_cursor_style,
    pub ccolour: libc::c_int,
    pub default_ccolour: libc::c_int,
    pub rupper: u_int,
    pub rlower: u_int,
    pub mode: libc::c_int,
    pub default_mode: libc::c_int,
    pub saved_cx: u_int,
    pub saved_cy: u_int,
    pub saved_grid: *mut grid,
    pub saved_cell: grid_cell,
    pub saved_flags: libc::c_int,
    pub tabs: *mut bitstr_t,
    pub sel: *mut screen_sel,
    pub write_list: *mut screen_write_cline,
    pub hyperlinks: *mut hyperlinks,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct grid {
    pub flags: libc::c_int,
    pub sx: u_int,
    pub sy: u_int,
    pub hscrolled: u_int,
    pub hsize: u_int,
    pub hlimit: u_int,
    pub linedata: *mut grid_line,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct grid_line {
    pub celldata: *mut grid_cell_entry,
    pub cellused: u_int,
    pub cellsize: u_int,
    pub extddata: *mut grid_extd_entry,
    pub extdsize: u_int,
    pub flags: libc::c_int,
    pub time: time_t,
}
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct grid_extd_entry {
    pub data: utf8_char,
    pub attr: u_short,
    pub flags: u_char,
    pub fg: libc::c_int,
    pub bg: libc::c_int,
    pub us: libc::c_int,
    pub link: u_int,
}
pub type utf8_char = u_int;
#[derive(Copy, Clone)]
#[repr(C, packed)]
pub struct grid_cell_entry {
    pub c2rust_unnamed: C2RustUnnamed_10,
    pub flags: u_char,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub union C2RustUnnamed_10 {
    pub offset: u_int,
    pub data: C2RustUnnamed_11,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_11 {
    pub attr: u_char,
    pub fg: u_char,
    pub bg: u_char,
    pub data: u_char,
}
pub type screen_cursor_style = libc::c_uint;
pub const SCREEN_CURSOR_BAR: screen_cursor_style = 3;
pub const SCREEN_CURSOR_UNDERLINE: screen_cursor_style = 2;
pub const SCREEN_CURSOR_BLOCK: screen_cursor_style = 1;
pub const SCREEN_CURSOR_DEFAULT: screen_cursor_style = 0;
pub type overlay_check_cb = Option<
    unsafe extern "C" fn(
        *mut client,
        *mut libc::c_void,
        u_int,
        u_int,
        u_int,
        *mut overlay_ranges,
    ) -> (),
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct overlay_ranges {
    pub px: [u_int; 3],
    pub nx: [u_int; 3],
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct session {
    pub id: u_int,
    pub name: *mut libc::c_char,
    pub cwd: *const libc::c_char,
    pub creation_time: timeval,
    pub last_attached_time: timeval,
    pub activity_time: timeval,
    pub last_activity_time: timeval,
    pub lock_timer: event,
    pub curw: *mut winlink,
    pub lastw: winlink_stack,
    pub windows: winlinks,
    pub statusat: libc::c_int,
    pub statuslines: u_int,
    pub options: *mut options,
    pub flags: libc::c_int,
    pub attached: u_int,
    pub tio: *mut termios,
    pub environ: *mut environ,
    pub references: libc::c_int,
    pub gentry: C2RustUnnamed_13,
    pub entry: C2RustUnnamed_12,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_12 {
    pub rbe_left: *mut session,
    pub rbe_right: *mut session,
    pub rbe_parent: *mut session,
    pub rbe_color: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_13 {
    pub tqe_next: *mut session,
    pub tqe_prev: *mut *mut session,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct winlinks {
    pub rbh_root: *mut winlink,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct winlink {
    pub idx: libc::c_int,
    pub session: *mut session,
    pub window: *mut window,
    pub flags: libc::c_int,
    pub entry: C2RustUnnamed_16,
    pub wentry: C2RustUnnamed_15,
    pub sentry: C2RustUnnamed_14,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_14 {
    pub tqe_next: *mut winlink,
    pub tqe_prev: *mut *mut winlink,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_15 {
    pub tqe_next: *mut winlink,
    pub tqe_prev: *mut *mut winlink,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_16 {
    pub rbe_left: *mut winlink,
    pub rbe_right: *mut winlink,
    pub rbe_parent: *mut winlink,
    pub rbe_color: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window {
    pub id: u_int,
    pub latest: *mut libc::c_void,
    pub name: *mut libc::c_char,
    pub name_event: event,
    pub name_time: timeval,
    pub alerts_timer: event,
    pub offset_timer: event,
    pub activity_time: timeval,
    pub active: *mut window_pane,
    pub last_panes: window_panes,
    pub panes: window_panes,
    pub lastlayout: libc::c_int,
    pub layout_root: *mut layout_cell,
    pub saved_layout_root: *mut layout_cell,
    pub old_layout: *mut libc::c_char,
    pub sx: u_int,
    pub sy: u_int,
    pub manual_sx: u_int,
    pub manual_sy: u_int,
    pub xpixel: u_int,
    pub ypixel: u_int,
    pub new_sx: u_int,
    pub new_sy: u_int,
    pub new_xpixel: u_int,
    pub new_ypixel: u_int,
    pub fill_character: *mut utf8_data,
    pub flags: libc::c_int,
    pub alerts_queued: libc::c_int,
    pub alerts_entry: C2RustUnnamed_19,
    pub options: *mut options,
    pub references: u_int,
    pub winlinks: C2RustUnnamed_18,
    pub entry: C2RustUnnamed_17,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_17 {
    pub rbe_left: *mut window,
    pub rbe_right: *mut window,
    pub rbe_parent: *mut window,
    pub rbe_color: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_18 {
    pub tqh_first: *mut winlink,
    pub tqh_last: *mut *mut winlink,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_19 {
    pub tqe_next: *mut window,
    pub tqe_prev: *mut *mut window,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct layout_cell {
    pub type_0: layout_type,
    pub parent: *mut layout_cell,
    pub sx: u_int,
    pub sy: u_int,
    pub xoff: u_int,
    pub yoff: u_int,
    pub wp: *mut window_pane,
    pub cells: layout_cells,
    pub entry: C2RustUnnamed_20,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_20 {
    pub tqe_next: *mut layout_cell,
    pub tqe_prev: *mut *mut layout_cell,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct layout_cells {
    pub tqh_first: *mut layout_cell,
    pub tqh_last: *mut *mut layout_cell,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_pane {
    pub id: u_int,
    pub active_point: u_int,
    pub window: *mut window,
    pub options: *mut options,
    pub layout_cell: *mut layout_cell,
    pub saved_layout_cell: *mut layout_cell,
    pub sx: u_int,
    pub sy: u_int,
    pub xoff: u_int,
    pub yoff: u_int,
    pub flags: libc::c_int,
    pub sb_slider_y: u_int,
    pub sb_slider_h: u_int,
    pub argc: libc::c_int,
    pub argv: *mut *mut libc::c_char,
    pub shell: *mut libc::c_char,
    pub cwd: *mut libc::c_char,
    pub pid: pid_t,
    pub tty: [libc::c_char; 32],
    pub status: libc::c_int,
    pub dead_time: timeval,
    pub fd: libc::c_int,
    pub event: *mut bufferevent,
    pub offset: window_pane_offset,
    pub base_offset: size_t,
    pub resize_queue: window_pane_resizes,
    pub resize_timer: event,
    pub ictx: *mut input_ctx,
    pub cached_gc: grid_cell,
    pub cached_active_gc: grid_cell,
    pub palette: colour_palette,
    pub pipe_fd: libc::c_int,
    pub pipe_event: *mut bufferevent,
    pub pipe_offset: window_pane_offset,
    pub screen: *mut screen,
    pub base: screen,
    pub status_screen: screen,
    pub status_size: size_t,
    pub modes: C2RustUnnamed_24,
    pub searchstr: *mut libc::c_char,
    pub searchregex: libc::c_int,
    pub border_gc_set: libc::c_int,
    pub border_gc: grid_cell,
    pub control_bg: libc::c_int,
    pub control_fg: libc::c_int,
    pub scrollbar_style: style,
    pub entry: C2RustUnnamed_23,
    pub sentry: C2RustUnnamed_22,
    pub tree_entry: C2RustUnnamed_21,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_21 {
    pub rbe_left: *mut window_pane,
    pub rbe_right: *mut window_pane,
    pub rbe_parent: *mut window_pane,
    pub rbe_color: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_22 {
    pub tqe_next: *mut window_pane,
    pub tqe_prev: *mut *mut window_pane,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_23 {
    pub tqe_next: *mut window_pane,
    pub tqe_prev: *mut *mut window_pane,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct style {
    pub gc: grid_cell,
    pub ignore: libc::c_int,
    pub fill: libc::c_int,
    pub align: style_align,
    pub list: style_list,
    pub range_type: style_range_type,
    pub range_argument: u_int,
    pub range_string: [libc::c_char; 16],
    pub width: libc::c_int,
    pub pad: libc::c_int,
    pub default_type: style_default_type,
}
pub type style_default_type = libc::c_uint;
pub const STYLE_DEFAULT_POP: style_default_type = 2;
pub const STYLE_DEFAULT_PUSH: style_default_type = 1;
pub const STYLE_DEFAULT_BASE: style_default_type = 0;
pub type style_range_type = libc::c_uint;
pub const STYLE_RANGE_USER: style_range_type = 6;
pub const STYLE_RANGE_SESSION: style_range_type = 5;
pub const STYLE_RANGE_WINDOW: style_range_type = 4;
pub const STYLE_RANGE_PANE: style_range_type = 3;
pub const STYLE_RANGE_RIGHT: style_range_type = 2;
pub const STYLE_RANGE_LEFT: style_range_type = 1;
pub const STYLE_RANGE_NONE: style_range_type = 0;
pub type style_list = libc::c_uint;
pub const STYLE_LIST_RIGHT_MARKER: style_list = 4;
pub const STYLE_LIST_LEFT_MARKER: style_list = 3;
pub const STYLE_LIST_FOCUS: style_list = 2;
pub const STYLE_LIST_ON: style_list = 1;
pub const STYLE_LIST_OFF: style_list = 0;
pub type style_align = libc::c_uint;
pub const STYLE_ALIGN_ABSOLUTE_CENTRE: style_align = 4;
pub const STYLE_ALIGN_RIGHT: style_align = 3;
pub const STYLE_ALIGN_CENTRE: style_align = 2;
pub const STYLE_ALIGN_LEFT: style_align = 1;
pub const STYLE_ALIGN_DEFAULT: style_align = 0;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_24 {
    pub tqh_first: *mut window_mode_entry,
    pub tqh_last: *mut *mut window_mode_entry,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_mode_entry {
    pub wp: *mut window_pane,
    pub swp: *mut window_pane,
    pub mode: *const window_mode,
    pub data: *mut libc::c_void,
    pub screen: *mut screen,
    pub prefix: u_int,
    pub entry: C2RustUnnamed_25,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_25 {
    pub tqe_next: *mut window_mode_entry,
    pub tqe_prev: *mut *mut window_mode_entry,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_mode {
    pub name: *const libc::c_char,
    pub default_format: *const libc::c_char,
    pub init: Option<
        unsafe extern "C" fn(*mut window_mode_entry, *mut cmd_find_state, *mut args) -> *mut screen,
    >,
    pub free: Option<unsafe extern "C" fn(*mut window_mode_entry) -> ()>,
    pub resize: Option<unsafe extern "C" fn(*mut window_mode_entry, u_int, u_int) -> ()>,
    pub update: Option<unsafe extern "C" fn(*mut window_mode_entry) -> ()>,
    pub key: Option<
        unsafe extern "C" fn(
            *mut window_mode_entry,
            *mut client,
            *mut session,
            *mut winlink,
            key_code,
            *mut mouse_event,
        ) -> (),
    >,
    pub key_table: Option<unsafe extern "C" fn(*mut window_mode_entry) -> *const libc::c_char>,
    pub command: Option<
        unsafe extern "C" fn(
            *mut window_mode_entry,
            *mut client,
            *mut session,
            *mut winlink,
            *mut args,
            *mut mouse_event,
        ) -> (),
    >,
    pub formats: Option<unsafe extern "C" fn(*mut window_mode_entry, *mut format_tree) -> ()>,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct cmd_find_state {
    pub flags: libc::c_int,
    pub current: *mut cmd_find_state,
    pub s: *mut session,
    pub wl: *mut winlink,
    pub w: *mut window,
    pub wp: *mut window_pane,
    pub idx: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_pane_offset {
    pub used: size_t,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct colour_palette {
    pub fg: libc::c_int,
    pub bg: libc::c_int,
    pub palette: *mut libc::c_int,
    pub default_palette: *mut libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_pane_resizes {
    pub tqh_first: *mut window_pane_resize,
    pub tqh_last: *mut *mut window_pane_resize,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_pane_resize {
    pub sx: u_int,
    pub sy: u_int,
    pub osx: u_int,
    pub osy: u_int,
    pub entry: C2RustUnnamed_26,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_26 {
    pub tqe_next: *mut window_pane_resize,
    pub tqe_prev: *mut *mut window_pane_resize,
}
pub type layout_type = libc::c_uint;
pub const LAYOUT_WINDOWPANE: layout_type = 2;
pub const LAYOUT_TOPBOTTOM: layout_type = 1;
pub const LAYOUT_LEFTRIGHT: layout_type = 0;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct window_panes {
    pub tqh_first: *mut window_pane,
    pub tqh_last: *mut *mut window_pane,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct winlink_stack {
    pub tqh_first: *mut winlink,
    pub tqh_last: *mut *mut winlink,
}
pub type prompt_type = libc::c_uint;
pub const PROMPT_TYPE_INVALID: prompt_type = 255;
pub const PROMPT_TYPE_WINDOW_TARGET: prompt_type = 3;
pub const PROMPT_TYPE_TARGET: prompt_type = 2;
pub const PROMPT_TYPE_SEARCH: prompt_type = 1;
pub const PROMPT_TYPE_COMMAND: prompt_type = 0;
pub type C2RustUnnamed_27 = libc::c_uint;
pub const PROMPT_COMMAND: C2RustUnnamed_27 = 1;
pub const PROMPT_ENTRY: C2RustUnnamed_27 = 0;
pub type prompt_free_cb = Option<unsafe extern "C" fn(*mut libc::c_void) -> ()>;
pub type prompt_input_cb = Option<
    unsafe extern "C" fn(
        *mut client,
        *mut libc::c_void,
        *const libc::c_char,
        libc::c_int,
    ) -> libc::c_int,
>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct key_table {
    pub name: *const libc::c_char,
    pub activity_time: timeval,
    pub key_bindings: key_bindings,
    pub default_key_bindings: key_bindings,
    pub references: u_int,
    pub entry: C2RustUnnamed_28,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_28 {
    pub rbe_left: *mut key_table,
    pub rbe_right: *mut key_table,
    pub rbe_parent: *mut key_table,
    pub rbe_color: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct key_bindings {
    pub rbh_root: *mut key_binding,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct key_binding {
    pub key: key_code,
    pub cmdlist: *mut cmd_list,
    pub note: *const libc::c_char,
    pub flags: libc::c_int,
    pub entry: C2RustUnnamed_29,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_29 {
    pub rbe_left: *mut key_binding,
    pub rbe_right: *mut key_binding,
    pub rbe_parent: *mut key_binding,
    pub rbe_color: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct cmd_list {
    pub references: libc::c_int,
    pub group: u_int,
    pub list: *mut cmds,
}
pub type C2RustUnnamed_30 = libc::c_uint;
pub const CLIENT_EXIT_DETACH: C2RustUnnamed_30 = 2;
pub const CLIENT_EXIT_SHUTDOWN: C2RustUnnamed_30 = 1;
pub const CLIENT_EXIT_RETURN: C2RustUnnamed_30 = 0;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct status_line {
    pub timer: event,
    pub screen: screen,
    pub active: *mut screen,
    pub references: libc::c_int,
    pub style: grid_cell,
    pub entries: [status_line_entry; 5],
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct status_line_entry {
    pub expanded: *mut libc::c_char,
    pub ranges: style_ranges,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct style_ranges {
    pub tqh_first: *mut style_range,
    pub tqh_last: *mut *mut style_range,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct style_range {
    pub type_0: style_range_type,
    pub argument: u_int,
    pub string: [libc::c_char; 16],
    pub start: u_int,
    pub end: u_int,
    pub entry: C2RustUnnamed_31,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_31 {
    pub tqe_next: *mut style_range,
    pub tqe_prev: *mut *mut style_range,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct tty {
    pub client: *mut client,
    pub start_timer: event,
    pub clipboard_timer: event,
    pub last_requests: time_t,
    pub sx: u_int,
    pub sy: u_int,
    pub xpixel: u_int,
    pub ypixel: u_int,
    pub cx: u_int,
    pub cy: u_int,
    pub cstyle: screen_cursor_style,
    pub ccolour: libc::c_int,
    pub oflag: libc::c_int,
    pub oox: u_int,
    pub ooy: u_int,
    pub osx: u_int,
    pub osy: u_int,
    pub mode: libc::c_int,
    pub fg: libc::c_int,
    pub bg: libc::c_int,
    pub rlower: u_int,
    pub rupper: u_int,
    pub rleft: u_int,
    pub rright: u_int,
    pub event_in: event,
    pub in_0: *mut evbuffer,
    pub event_out: event,
    pub out: *mut evbuffer,
    pub timer: event,
    pub discarded: size_t,
    pub tio: termios,
    pub cell: grid_cell,
    pub last_cell: grid_cell,
    pub flags: libc::c_int,
    pub term: *mut tty_term,
    pub mouse_last_x: u_int,
    pub mouse_last_y: u_int,
    pub mouse_last_b: u_int,
    pub mouse_drag_flag: libc::c_int,
    pub mouse_scrolling_flag: libc::c_int,
    pub mouse_slider_mpos: libc::c_int,
    pub mouse_drag_update: Option<unsafe extern "C" fn(*mut client, *mut mouse_event) -> ()>,
    pub mouse_drag_release: Option<unsafe extern "C" fn(*mut client, *mut mouse_event) -> ()>,
    pub key_timer: event,
    pub key_tree: *mut tty_key,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct tty_term {
    pub name: *mut libc::c_char,
    pub tty: *mut tty,
    pub features: libc::c_int,
    pub acs: [[libc::c_char; 2]; 256],
    pub codes: *mut tty_code,
    pub flags: libc::c_int,
    pub entry: C2RustUnnamed_32,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_32 {
    pub le_next: *mut tty_term,
    pub le_prev: *mut *mut tty_term,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct client_windows {
    pub rbh_root: *mut client_window,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct client_window {
    pub window: u_int,
    pub pane: *mut window_pane,
    pub sx: u_int,
    pub sy: u_int,
    pub entry: C2RustUnnamed_33,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_33 {
    pub rbe_left: *mut client_window,
    pub rbe_right: *mut client_window,
    pub rbe_parent: *mut client_window,
    pub rbe_color: libc::c_int,
}
pub type box_lines = libc::c_int;
pub const BOX_LINES_NONE: box_lines = 6;
pub const BOX_LINES_PADDED: box_lines = 5;
pub const BOX_LINES_ROUNDED: box_lines = 4;
pub const BOX_LINES_SIMPLE: box_lines = 3;
pub const BOX_LINES_HEAVY: box_lines = 2;
pub const BOX_LINES_DOUBLE: box_lines = 1;
pub const BOX_LINES_SINGLE: box_lines = 0;
pub const BOX_LINES_DEFAULT: box_lines = -1;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct menu_item {
    pub name: *const libc::c_char,
    pub key: key_code,
    pub command: *const libc::c_char,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct menu {
    pub title: *const libc::c_char,
    pub items: *mut menu_item,
    pub count: u_int,
    pub width: u_int,
}
pub type menu_choice_cb =
    Option<unsafe extern "C" fn(*mut menu, u_int, key_code, *mut libc::c_void) -> ()>;
pub type args_type = libc::c_uint;
pub const ARGS_COMMANDS: args_type = 2;
pub const ARGS_STRING: args_type = 1;
pub const ARGS_NONE: args_type = 0;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct args_value {
    pub type_0: args_type,
    pub c2rust_unnamed: C2RustUnnamed_35,
    pub cached: *mut libc::c_char,
    pub entry: C2RustUnnamed_34,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct C2RustUnnamed_34 {
    pub tqe_next: *mut args_value,
    pub tqe_prev: *mut *mut args_value,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub union C2RustUnnamed_35 {
    pub string: *mut libc::c_char,
    pub cmdlist: *mut cmd_list,
}
pub type args_parse_type = libc::c_uint;
pub const ARGS_PARSE_COMMANDS: args_parse_type = 3;
pub const ARGS_PARSE_COMMANDS_OR_STRING: args_parse_type = 2;
pub const ARGS_PARSE_STRING: args_parse_type = 1;
pub const ARGS_PARSE_INVALID: args_parse_type = 0;
pub type args_parse_cb =
    Option<unsafe extern "C" fn(*mut args, u_int, *mut *mut libc::c_char) -> args_parse_type>;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct args_parse {
    pub template: *const libc::c_char,
    pub lower: libc::c_int,
    pub upper: libc::c_int,
    pub cb: args_parse_cb,
}
pub type cmd_find_type = libc::c_uint;
pub const CMD_FIND_SESSION: cmd_find_type = 2;
pub const CMD_FIND_WINDOW: cmd_find_type = 1;
pub const CMD_FIND_PANE: cmd_find_type = 0;
pub type cmd_retval = libc::c_int;
pub const CMD_RETURN_STOP: cmd_retval = 2;
pub const CMD_RETURN_WAIT: cmd_retval = 1;
pub const CMD_RETURN_NORMAL: cmd_retval = 0;
pub const CMD_RETURN_ERROR: cmd_retval = -1;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct cmd_entry_flag {
    pub flag: libc::c_char,
    pub type_0: cmd_find_type,
    pub flags: libc::c_int,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub struct cmd_entry {
    pub name: *const libc::c_char,
    pub alias: *const libc::c_char,
    pub args: args_parse,
    pub usage: *const libc::c_char,
    pub source: cmd_entry_flag,
    pub target: cmd_entry_flag,
    pub flags: libc::c_int,
    pub exec: Option<unsafe extern "C" fn(*mut cmd, *mut cmdq_item) -> cmd_retval>,
}
pub type options_table_type = libc::c_uint;
pub const OPTIONS_TABLE_COMMAND: options_table_type = 6;
pub const OPTIONS_TABLE_CHOICE: options_table_type = 5;
pub const OPTIONS_TABLE_FLAG: options_table_type = 4;
pub const OPTIONS_TABLE_COLOUR: options_table_type = 3;
pub const OPTIONS_TABLE_KEY: options_table_type = 2;
pub const OPTIONS_TABLE_NUMBER: options_table_type = 1;
pub const OPTIONS_TABLE_STRING: options_table_type = 0;
#[derive(Copy, Clone)]
#[repr(C)]
pub struct options_table_entry {
    pub name: *const libc::c_char,
    pub alternative_name: *const libc::c_char,
    pub type_0: options_table_type,
    pub scope: libc::c_int,
    pub flags: libc::c_int,
    pub minimum: u_int,
    pub maximum: u_int,
    pub choices: *mut *const libc::c_char,
    pub default_str: *const libc::c_char,
    pub default_num: libc::c_longlong,
    pub default_arr: *mut *const libc::c_char,
    pub separator: *const libc::c_char,
    pub pattern: *const libc::c_char,
    pub text: *const libc::c_char,
    pub unit: *const libc::c_char,
}
pub type popup_close_cb = Option<unsafe extern "C" fn(libc::c_int, *mut libc::c_void) -> ()>;
#[no_mangle]
pub static mut cmd_display_menu_entry: cmd_entry = unsafe {
    {
        let mut init = cmd_entry {
            name: b"display-menu\0" as *const u8 as *const libc::c_char,
            alias: b"menu\0" as *const u8 as *const libc::c_char,
            args: {
                let mut init = args_parse {
                    template: b"b:c:C:H:s:S:MOt:T:x:y:\0" as *const u8
                        as *const libc::c_char,
                    lower: 1 as libc::c_int,
                    upper: -(1 as libc::c_int),
                    cb: Some(
                        cmd_display_menu_args_parse
                            as unsafe extern "C" fn(
                                *mut args,
                                u_int,
                                *mut *mut libc::c_char,
                            ) -> args_parse_type,
                    ),
                };
                init
            },
            usage: b"[-MO] [-b border-lines] [-c target-client] [-C starting-choice] [-H selected-style] [-s style] [-S border-style] [-t target-pane][-T title] [-x position] [-y position] name key command ...\0"
                as *const u8 as *const libc::c_char,
            source: cmd_entry_flag {
                flag: 0,
                type_0: CMD_FIND_PANE,
                flags: 0,
            },
            target: {
                let mut init = cmd_entry_flag {
                    flag: 't' as i32 as libc::c_char,
                    type_0: CMD_FIND_PANE,
                    flags: 0 as libc::c_int,
                };
                init
            },
            flags: 0x4 as libc::c_int | 0x8 as libc::c_int,
            exec: Some(
                cmd_display_menu_exec
                    as unsafe extern "C" fn(*mut cmd, *mut cmdq_item) -> cmd_retval,
            ),
        };
        init
    }
};
#[no_mangle]
pub static mut cmd_display_popup_entry: cmd_entry = unsafe {
    {
        let mut init = cmd_entry {
            name: b"display-popup\0" as *const u8 as *const libc::c_char,
            alias: b"popup\0" as *const u8 as *const libc::c_char,
            args: {
                let mut init = args_parse {
                    template: b"Bb:Cc:d:e:Eh:s:S:t:T:w:x:y:\0" as *const u8
                        as *const libc::c_char,
                    lower: 0 as libc::c_int,
                    upper: -(1 as libc::c_int),
                    cb: None,
                };
                init
            },
            usage: b"[-BCE] [-b border-lines] [-c target-client] [-d start-directory] [-e environment] [-h height] [-s style] [-S border-style] [-t target-pane][-T title] [-w width] [-x position] [-y position] [shell-command]\0"
                as *const u8 as *const libc::c_char,
            source: cmd_entry_flag {
                flag: 0,
                type_0: CMD_FIND_PANE,
                flags: 0,
            },
            target: {
                let mut init = cmd_entry_flag {
                    flag: 't' as i32 as libc::c_char,
                    type_0: CMD_FIND_PANE,
                    flags: 0 as libc::c_int,
                };
                init
            },
            flags: 0x4 as libc::c_int | 0x8 as libc::c_int,
            exec: Some(
                cmd_display_popup_exec
                    as unsafe extern "C" fn(*mut cmd, *mut cmdq_item) -> cmd_retval,
            ),
        };
        init
    }
};
unsafe extern "C" fn cmd_display_menu_args_parse(
    mut args: *mut args,
    mut idx: u_int,
    mut cause: *mut *mut libc::c_char,
) -> args_parse_type {
    let mut i: u_int = 0 as libc::c_int as u_int;
    let mut type_0: args_parse_type = ARGS_PARSE_STRING;
    loop {
        type_0 = ARGS_PARSE_STRING;
        if i == idx {
            break;
        }
        let fresh0 = i;
        i = i.wrapping_add(1);
        if *args_string(args, fresh0) as libc::c_int == '\0' as i32 {
            continue;
        }
        type_0 = ARGS_PARSE_STRING;
        let fresh1 = i;
        i = i.wrapping_add(1);
        if fresh1 == idx {
            break;
        }
        type_0 = ARGS_PARSE_COMMANDS_OR_STRING;
        let fresh2 = i;
        i = i.wrapping_add(1);
        if fresh2 == idx {
            break;
        }
    }
    return type_0;
}
unsafe extern "C" fn cmd_display_menu_get_position(
    mut tc: *mut client,
    mut item: *mut cmdq_item,
    mut args: *mut args,
    mut px: *mut u_int,
    mut py: *mut u_int,
    mut w: u_int,
    mut h: u_int,
) -> libc::c_int {
    let mut tty: *mut tty = &mut (*tc).tty;
    let mut target: *mut cmd_find_state = cmdq_get_target(item);
    let mut event: *mut key_event = cmdq_get_event(item);
    let mut s: *mut session = (*tc).session;
    let mut wl: *mut winlink = (*target).wl;
    let mut wp: *mut window_pane = (*target).wp;
    let mut ranges: *mut style_ranges = std::ptr::null_mut::<style_ranges>();
    let mut sr: *mut style_range = std::ptr::null_mut::<style_range>();
    let mut xp: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut yp: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut p: *mut libc::c_char = std::ptr::null_mut::<libc::c_char>();
    let mut top: libc::c_int = 0;
    let mut line: u_int = 0;
    let mut ox: u_int = 0;
    let mut oy: u_int = 0;
    let mut sx: u_int = 0;
    let mut sy: u_int = 0;
    let mut lines: u_int = 0;
    let mut position: u_int = 0;
    let mut n: libc::c_long = 0;
    let mut ft: *mut format_tree = std::ptr::null_mut::<format_tree>();
    if w > (*tty).sx || h > (*tty).sy {
        return 0 as libc::c_int;
    }
    ft = format_create_from_target(item);
    if (*event).m.valid != 0 {
        format_add(
            ft,
            b"popup_mouse_x\0" as *const u8 as *const libc::c_char,
            b"%u\0" as *const u8 as *const libc::c_char,
            (*event).m.x,
        );
        format_add(
            ft,
            b"popup_mouse_y\0" as *const u8 as *const libc::c_char,
            b"%u\0" as *const u8 as *const libc::c_char,
            (*event).m.y,
        );
    }
    top = status_at_line(tc);
    if top != -(1 as libc::c_int) {
        lines = status_line_size(tc);
        if top == 0 as libc::c_int {
            top = lines as libc::c_int;
        } else {
            top = 0 as libc::c_int;
        }
        position = options_get_number(
            (*s).options,
            b"status-position\0" as *const u8 as *const libc::c_char,
        ) as u_int;
        line = 0 as libc::c_int as u_int;
        while line < lines {
            ranges = &mut (*((*tc).status.entries).as_mut_ptr().offset(line as isize)).ranges;
            sr = (*ranges).tqh_first;
            while !sr.is_null() {
                if (*sr).type_0 as libc::c_uint == STYLE_RANGE_WINDOW as libc::c_int as libc::c_uint
                {
                    if (*sr).argument == (*wl).idx as u_int {
                        break;
                    }
                }
                sr = (*sr).entry.tqe_next;
            }
            if !sr.is_null() {
                break;
            }
            line = line.wrapping_add(1);
        }
        if !sr.is_null() {
            format_add(
                ft,
                b"popup_window_status_line_x\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                (*sr).start,
            );
            if position == 0 as libc::c_int as libc::c_uint {
                format_add(
                    ft,
                    b"popup_window_status_line_y\0" as *const u8 as *const libc::c_char,
                    b"%u\0" as *const u8 as *const libc::c_char,
                    line.wrapping_add(1 as libc::c_int as libc::c_uint)
                        .wrapping_add(h),
                );
            } else {
                format_add(
                    ft,
                    b"popup_window_status_line_y\0" as *const u8 as *const libc::c_char,
                    b"%u\0" as *const u8 as *const libc::c_char,
                    ((*tty).sy).wrapping_sub(lines).wrapping_add(line),
                );
            }
        }
        if position == 0 as libc::c_int as libc::c_uint {
            format_add(
                ft,
                b"popup_status_line_y\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                lines.wrapping_add(h),
            );
        } else {
            format_add(
                ft,
                b"popup_status_line_y\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                ((*tty).sy).wrapping_sub(lines),
            );
        }
    } else {
        top = 0 as libc::c_int;
    }
    format_add(
        ft,
        b"popup_width\0" as *const u8 as *const libc::c_char,
        b"%u\0" as *const u8 as *const libc::c_char,
        w,
    );
    format_add(
        ft,
        b"popup_height\0" as *const u8 as *const libc::c_char,
        b"%u\0" as *const u8 as *const libc::c_char,
        h,
    );
    n = ((*tty).sx).wrapping_sub(1 as libc::c_int as libc::c_uint) as libc::c_long
        / 2 as libc::c_int as libc::c_long
        - w.wrapping_div(2 as libc::c_int as libc::c_uint) as libc::c_long;
    if n < 0 as libc::c_int as libc::c_long {
        format_add(
            ft,
            b"popup_centre_x\0" as *const u8 as *const libc::c_char,
            b"%u\0" as *const u8 as *const libc::c_char,
            0 as libc::c_int,
        );
    } else {
        format_add(
            ft,
            b"popup_centre_x\0" as *const u8 as *const libc::c_char,
            b"%ld\0" as *const u8 as *const libc::c_char,
            n,
        );
    }
    n = ((*tty).sy)
        .wrapping_sub(1 as libc::c_int as libc::c_uint)
        .wrapping_div(2 as libc::c_int as libc::c_uint)
        .wrapping_add(h.wrapping_div(2 as libc::c_int as libc::c_uint)) as libc::c_long;
    if n >= (*tty).sy as libc::c_long {
        format_add(
            ft,
            b"popup_centre_y\0" as *const u8 as *const libc::c_char,
            b"%u\0" as *const u8 as *const libc::c_char,
            ((*tty).sy).wrapping_sub(h),
        );
    } else {
        format_add(
            ft,
            b"popup_centre_y\0" as *const u8 as *const libc::c_char,
            b"%ld\0" as *const u8 as *const libc::c_char,
            n,
        );
    }
    if (*event).m.valid != 0 {
        n = (*event).m.x as libc::c_long
            - w.wrapping_div(2 as libc::c_int as libc::c_uint) as libc::c_long;
        if n < 0 as libc::c_int as libc::c_long {
            format_add(
                ft,
                b"popup_mouse_centre_x\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                0 as libc::c_int,
            );
        } else {
            format_add(
                ft,
                b"popup_mouse_centre_x\0" as *const u8 as *const libc::c_char,
                b"%ld\0" as *const u8 as *const libc::c_char,
                n,
            );
        }
        n = ((*event).m.y).wrapping_sub(h.wrapping_div(2 as libc::c_int as libc::c_uint))
            as libc::c_long;
        if n + h as libc::c_long >= (*tty).sy as libc::c_long {
            format_add(
                ft,
                b"popup_mouse_centre_y\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                ((*tty).sy).wrapping_sub(h),
            );
        } else {
            format_add(
                ft,
                b"popup_mouse_centre_y\0" as *const u8 as *const libc::c_char,
                b"%ld\0" as *const u8 as *const libc::c_char,
                n,
            );
        }
        n = (*event).m.y as libc::c_long + h as libc::c_long;
        if n >= (*tty).sy as libc::c_long {
            format_add(
                ft,
                b"popup_mouse_top\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                ((*tty).sy).wrapping_sub(1 as libc::c_int as libc::c_uint),
            );
        } else {
            format_add(
                ft,
                b"popup_mouse_top\0" as *const u8 as *const libc::c_char,
                b"%ld\0" as *const u8 as *const libc::c_char,
                n,
            );
        }
        n = ((*event).m.y).wrapping_sub(h) as libc::c_long;
        if n < 0 as libc::c_int as libc::c_long {
            format_add(
                ft,
                b"popup_mouse_bottom\0" as *const u8 as *const libc::c_char,
                b"%u\0" as *const u8 as *const libc::c_char,
                0 as libc::c_int,
            );
        } else {
            format_add(
                ft,
                b"popup_mouse_bottom\0" as *const u8 as *const libc::c_char,
                b"%ld\0" as *const u8 as *const libc::c_char,
                n,
            );
        }
    }
    tty_window_offset(&mut (*tc).tty, &mut ox, &mut oy, &mut sx, &mut sy);
    n = (top as libc::c_uint)
        .wrapping_add((*wp).yoff)
        .wrapping_sub(oy)
        .wrapping_add(h) as libc::c_long;
    if n >= (*tty).sy as libc::c_long {
        format_add(
            ft,
            b"popup_pane_top\0" as *const u8 as *const libc::c_char,
            b"%u\0" as *const u8 as *const libc::c_char,
            ((*tty).sy).wrapping_sub(h),
        );
    } else {
        format_add(
            ft,
            b"popup_pane_top\0" as *const u8 as *const libc::c_char,
            b"%ld\0" as *const u8 as *const libc::c_char,
            n,
        );
    }
    format_add(
        ft,
        b"popup_pane_bottom\0" as *const u8 as *const libc::c_char,
        b"%u\0" as *const u8 as *const libc::c_char,
        (top as libc::c_uint)
            .wrapping_add((*wp).yoff)
            .wrapping_add((*wp).sy)
            .wrapping_sub(oy),
    );
    format_add(
        ft,
        b"popup_pane_left\0" as *const u8 as *const libc::c_char,
        b"%u\0" as *const u8 as *const libc::c_char,
        ((*wp).xoff).wrapping_sub(ox),
    );
    n = (*wp).xoff as libc::c_long + (*wp).sx as libc::c_long
        - ox as libc::c_long
        - w as libc::c_long;
    if n < 0 as libc::c_int as libc::c_long {
        format_add(
            ft,
            b"popup_pane_right\0" as *const u8 as *const libc::c_char,
            b"%u\0" as *const u8 as *const libc::c_char,
            0 as libc::c_int,
        );
    } else {
        format_add(
            ft,
            b"popup_pane_right\0" as *const u8 as *const libc::c_char,
            b"%ld\0" as *const u8 as *const libc::c_char,
            n,
        );
    }
    xp = args_get(args, 'x' as i32 as u_char);
    if xp.is_null() || strcmp(xp, b"C\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        xp = b"#{popup_centre_x}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(xp, b"R\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        xp = b"#{popup_pane_right}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(xp, b"P\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        xp = b"#{popup_pane_left}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(xp, b"M\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        xp = b"#{popup_mouse_centre_x}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(xp, b"W\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        xp = b"#{popup_window_status_line_x}\0" as *const u8 as *const libc::c_char;
    }
    p = format_expand(ft, xp);
    n = strtol(
        p,
        std::ptr::null_mut::<*mut libc::c_char>(),
        10 as libc::c_int,
    );
    if n + w as libc::c_long >= (*tty).sx as libc::c_long {
        n = ((*tty).sx).wrapping_sub(w) as libc::c_long;
    } else if n < 0 as libc::c_int as libc::c_long {
        n = 0 as libc::c_int as libc::c_long;
    }
    *px = n as u_int;
    log_debug(
        b"%s: -x: %s = %s = %u (-w %u)\0" as *const u8 as *const libc::c_char,
        (*::core::mem::transmute::<&[u8; 30], &[libc::c_char; 30]>(
            b"cmd_display_menu_get_position\0",
        ))
        .as_ptr(),
        xp,
        p,
        *px,
        w,
    );
    free(p as *mut libc::c_void);
    yp = args_get(args, 'y' as i32 as u_char);
    if yp.is_null() || strcmp(yp, b"C\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        yp = b"#{popup_centre_y}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(yp, b"P\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        yp = b"#{popup_pane_bottom}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(yp, b"M\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        yp = b"#{popup_mouse_top}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(yp, b"S\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        yp = b"#{popup_status_line_y}\0" as *const u8 as *const libc::c_char;
    } else if strcmp(yp, b"W\0" as *const u8 as *const libc::c_char) == 0 as libc::c_int {
        yp = b"#{popup_window_status_line_y}\0" as *const u8 as *const libc::c_char;
    }
    p = format_expand(ft, yp);
    n = strtol(
        p,
        std::ptr::null_mut::<*mut libc::c_char>(),
        10 as libc::c_int,
    );
    if n < h as libc::c_long {
        n = 0 as libc::c_int as libc::c_long;
    } else {
        n -= h as libc::c_long;
    }
    if n + h as libc::c_long >= (*tty).sy as libc::c_long {
        n = ((*tty).sy).wrapping_sub(h) as libc::c_long;
    } else if n < 0 as libc::c_int as libc::c_long {
        n = 0 as libc::c_int as libc::c_long;
    }
    *py = n as u_int;
    log_debug(
        b"%s: -y: %s = %s = %u (-h %u)\0" as *const u8 as *const libc::c_char,
        (*::core::mem::transmute::<&[u8; 30], &[libc::c_char; 30]>(
            b"cmd_display_menu_get_position\0",
        ))
        .as_ptr(),
        yp,
        p,
        *py,
        h,
    );
    free(p as *mut libc::c_void);
    format_free(ft);
    return 1 as libc::c_int;
}
unsafe extern "C" fn cmd_display_menu_exec(
    mut self_0: *mut cmd,
    mut item: *mut cmdq_item,
) -> cmd_retval {
    let mut args: *mut args = cmd_get_args(self_0);
    let mut target: *mut cmd_find_state = cmdq_get_target(item);
    let mut event: *mut key_event = cmdq_get_event(item);
    let mut tc: *mut client = cmdq_get_target_client(item);
    let mut menu: *mut menu = std::ptr::null_mut::<menu>();
    let mut menu_item: menu_item = menu_item {
        name: std::ptr::null::<libc::c_char>(),
        key: 0,
        command: std::ptr::null::<libc::c_char>(),
    };
    let mut key: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut name: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut value: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut style: *const libc::c_char = args_get(args, 's' as i32 as u_char);
    let mut border_style: *const libc::c_char = args_get(args, 'S' as i32 as u_char);
    let mut selected_style: *const libc::c_char = args_get(args, 'H' as i32 as u_char);
    let mut lines: box_lines = BOX_LINES_DEFAULT;
    let mut title: *mut libc::c_char = std::ptr::null_mut::<libc::c_char>();
    let mut cause: *mut libc::c_char = std::ptr::null_mut::<libc::c_char>();
    let mut flags: libc::c_int = 0 as libc::c_int;
    let mut starting_choice: libc::c_int = 0 as libc::c_int;
    let mut px: u_int = 0;
    let mut py: u_int = 0;
    let mut i: u_int = 0;
    let mut count: u_int = args_count(args);
    let mut o: *mut options = (*(*(*(*target).s).curw).window).options;
    let mut oe: *mut options_entry = std::ptr::null_mut::<options_entry>();
    if ((*tc).overlay_draw).is_some() {
        return CMD_RETURN_NORMAL;
    }
    if args_has(args, 'C' as i32 as u_char) != 0 {
        if strcmp(
            args_get(args, 'C' as i32 as u_char),
            b"-\0" as *const u8 as *const libc::c_char,
        ) == 0 as libc::c_int
        {
            starting_choice = -(1 as libc::c_int);
        } else {
            starting_choice = args_strtonum(
                args,
                'C' as i32 as u_char,
                0 as libc::c_int as libc::c_longlong,
                (2147483647 as libc::c_int as libc::c_uint)
                    .wrapping_mul(2 as libc::c_uint)
                    .wrapping_add(1 as libc::c_uint) as libc::c_longlong,
                &mut cause,
            ) as libc::c_int;
            if !cause.is_null() {
                cmdq_error(
                    item,
                    b"starting choice %s\0" as *const u8 as *const libc::c_char,
                    cause,
                );
                free(cause as *mut libc::c_void);
                return CMD_RETURN_ERROR;
            }
        }
    }
    if args_has(args, 'T' as i32 as u_char) != 0 {
        title = format_single_from_target(item, args_get(args, 'T' as i32 as u_char));
    } else {
        title = xstrdup(b"\0" as *const u8 as *const libc::c_char);
    }
    menu = menu_create(title);
    free(title as *mut libc::c_void);
    i = 0 as libc::c_int as u_int;
    while i != count {
        let fresh3 = i;
        i = i.wrapping_add(1);
        name = args_string(args, fresh3);
        if *name as libc::c_int == '\0' as i32 {
            menu_add_item(menu, std::ptr::null::<menu_item>(), item, tc, target);
        } else {
            if count.wrapping_sub(i) < 2 as libc::c_int as libc::c_uint {
                cmdq_error(
                    item,
                    b"not enough arguments\0" as *const u8 as *const libc::c_char,
                );
                menu_free(menu);
                return CMD_RETURN_ERROR;
            }
            let fresh4 = i;
            i = i.wrapping_add(1);
            key = args_string(args, fresh4);
            menu_item.name = name;
            menu_item.key = key_string_lookup_string(key);
            let fresh5 = i;
            i = i.wrapping_add(1);
            menu_item.command = args_string(args, fresh5);
            menu_add_item(menu, &mut menu_item, item, tc, target);
        }
    }
    if menu.is_null() {
        cmdq_error(
            item,
            b"invalid menu arguments\0" as *const u8 as *const libc::c_char,
        );
        return CMD_RETURN_ERROR;
    }
    if (*menu).count == 0 as libc::c_int as libc::c_uint {
        menu_free(menu);
        return CMD_RETURN_NORMAL;
    }
    if cmd_display_menu_get_position(
        tc,
        item,
        args,
        &mut px,
        &mut py,
        ((*menu).width).wrapping_add(4 as libc::c_int as libc::c_uint),
        ((*menu).count).wrapping_add(2 as libc::c_int as libc::c_uint),
    ) == 0
    {
        menu_free(menu);
        return CMD_RETURN_NORMAL;
    }
    value = args_get(args, 'b' as i32 as u_char);
    if !value.is_null() {
        oe = options_get(
            o,
            b"menu-border-lines\0" as *const u8 as *const libc::c_char,
        );
        lines = options_find_choice(options_table_entry(oe), value, &mut cause) as box_lines;
        if lines as libc::c_int == -(1 as libc::c_int) {
            cmdq_error(
                item,
                b"menu-border-lines %s\0" as *const u8 as *const libc::c_char,
                cause,
            );
            free(cause as *mut libc::c_void);
            return CMD_RETURN_ERROR;
        }
    }
    if args_has(args, 'O' as i32 as u_char) != 0 {
        flags |= 0x4 as libc::c_int;
    }
    if (*event).m.valid == 0 && args_has(args, 'M' as i32 as u_char) == 0 {
        flags |= 0x1 as libc::c_int;
    }
    if menu_display(
        menu,
        flags,
        starting_choice,
        item,
        px,
        py,
        tc,
        lines,
        style,
        selected_style,
        border_style,
        target,
        None,
        std::ptr::null_mut::<libc::c_void>(),
    ) != 0 as libc::c_int
    {
        return CMD_RETURN_NORMAL;
    }
    return CMD_RETURN_WAIT;
}
unsafe extern "C" fn cmd_display_popup_exec(
    mut self_0: *mut cmd,
    mut item: *mut cmdq_item,
) -> cmd_retval {
    let mut args: *mut args = cmd_get_args(self_0);
    let mut target: *mut cmd_find_state = cmdq_get_target(item);
    let mut s: *mut session = (*target).s;
    let mut tc: *mut client = cmdq_get_target_client(item);
    let mut tty: *mut tty = &mut (*tc).tty;
    let mut value: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut shell: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut shellcmd: *const libc::c_char = std::ptr::null::<libc::c_char>();
    let mut style: *const libc::c_char = args_get(args, 's' as i32 as u_char);
    let mut border_style: *const libc::c_char = args_get(args, 'S' as i32 as u_char);
    let mut cwd: *mut libc::c_char = std::ptr::null_mut::<libc::c_char>();
    let mut cause: *mut libc::c_char = std::ptr::null_mut::<libc::c_char>();
    let mut argv: *mut *mut libc::c_char = std::ptr::null_mut::<*mut libc::c_char>();
    let mut title: *mut libc::c_char = std::ptr::null_mut::<libc::c_char>();
    let mut flags: libc::c_int = 0 as libc::c_int;
    let mut argc: libc::c_int = 0 as libc::c_int;
    let mut lines: box_lines = BOX_LINES_DEFAULT;
    let mut px: u_int = 0;
    let mut py: u_int = 0;
    let mut w: u_int = 0;
    let mut h: u_int = 0;
    let mut count: u_int = args_count(args);
    let mut av: *mut args_value = std::ptr::null_mut::<args_value>();
    let mut env: *mut environ = std::ptr::null_mut::<environ>();
    let mut o: *mut options = (*(*(*s).curw).window).options;
    let mut oe: *mut options_entry = std::ptr::null_mut::<options_entry>();
    if args_has(args, 'C' as i32 as u_char) != 0 {
        server_client_clear_overlay(tc);
        return CMD_RETURN_NORMAL;
    }
    if ((*tc).overlay_draw).is_some() {
        return CMD_RETURN_NORMAL;
    }
    h = ((*tty).sy).wrapping_div(2 as libc::c_int as libc::c_uint);
    if args_has(args, 'h' as i32 as u_char) != 0 {
        h = args_percentage(
            args,
            'h' as i32 as u_char,
            1 as libc::c_int as libc::c_longlong,
            (*tty).sy as libc::c_longlong,
            (*tty).sy as libc::c_longlong,
            &mut cause,
        ) as u_int;
        if !cause.is_null() {
            cmdq_error(
                item,
                b"height %s\0" as *const u8 as *const libc::c_char,
                cause,
            );
            free(cause as *mut libc::c_void);
            return CMD_RETURN_ERROR;
        }
    }
    w = ((*tty).sx).wrapping_div(2 as libc::c_int as libc::c_uint);
    if args_has(args, 'w' as i32 as u_char) != 0 {
        w = args_percentage(
            args,
            'w' as i32 as u_char,
            1 as libc::c_int as libc::c_longlong,
            (*tty).sx as libc::c_longlong,
            (*tty).sx as libc::c_longlong,
            &mut cause,
        ) as u_int;
        if !cause.is_null() {
            cmdq_error(
                item,
                b"width %s\0" as *const u8 as *const libc::c_char,
                cause,
            );
            free(cause as *mut libc::c_void);
            return CMD_RETURN_ERROR;
        }
    }
    if w > (*tty).sx {
        w = (*tty).sx;
    }
    if h > (*tty).sy {
        h = (*tty).sy;
    }
    if cmd_display_menu_get_position(tc, item, args, &mut px, &mut py, w, h) == 0 {
        return CMD_RETURN_NORMAL;
    }
    value = args_get(args, 'b' as i32 as u_char);
    if args_has(args, 'B' as i32 as u_char) != 0 {
        lines = BOX_LINES_NONE;
    } else if !value.is_null() {
        oe = options_get(
            o,
            b"popup-border-lines\0" as *const u8 as *const libc::c_char,
        );
        lines = options_find_choice(options_table_entry(oe), value, &mut cause) as box_lines;
        if !cause.is_null() {
            cmdq_error(
                item,
                b"popup-border-lines %s\0" as *const u8 as *const libc::c_char,
                cause,
            );
            free(cause as *mut libc::c_void);
            return CMD_RETURN_ERROR;
        }
    }
    value = args_get(args, 'd' as i32 as u_char);
    if !value.is_null() {
        cwd = format_single_from_target(item, value);
    } else {
        cwd = xstrdup(server_client_get_cwd(tc, s));
    }
    if count == 0 as libc::c_int as libc::c_uint {
        shellcmd = options_get_string(
            (*s).options,
            b"default-command\0" as *const u8 as *const libc::c_char,
        );
    } else if count == 1 as libc::c_int as libc::c_uint {
        shellcmd = args_string(args, 0 as libc::c_int as u_int);
    }
    if count <= 1 as libc::c_int as libc::c_uint
        && (shellcmd.is_null() || *shellcmd as libc::c_int == '\0' as i32)
    {
        shellcmd = std::ptr::null::<libc::c_char>();
        shell = options_get_string(
            (*s).options,
            b"default-shell\0" as *const u8 as *const libc::c_char,
        );
        if checkshell(shell) == 0 {
            shell = b"/bin/sh\0" as *const u8 as *const libc::c_char;
        }
        cmd_append_argv(&mut argc, &mut argv, shell);
    } else {
        args_to_vector(args, &mut argc, &mut argv);
    }
    if args_has(args, 'e' as i32 as u_char) >= 1 as libc::c_int {
        env = environ_create();
        av = args_first_value(args, 'e' as i32 as u_char);
        while !av.is_null() {
            environ_put(env, (*av).c2rust_unnamed.string, 0 as libc::c_int);
            av = args_next_value(av);
        }
    }
    if args_has(args, 'T' as i32 as u_char) != 0 {
        title = format_single_from_target(item, args_get(args, 'T' as i32 as u_char));
    } else {
        title = xstrdup(b"\0" as *const u8 as *const libc::c_char);
    }
    if args_has(args, 'E' as i32 as u_char) > 1 as libc::c_int {
        flags |= 0x2 as libc::c_int;
    } else if args_has(args, 'E' as i32 as u_char) != 0 {
        flags |= 0x1 as libc::c_int;
    }
    if popup_display(
        flags,
        lines,
        item,
        px,
        py,
        w,
        h,
        env,
        shellcmd,
        argc,
        argv,
        cwd,
        title,
        tc,
        s,
        style,
        border_style,
        None,
        std::ptr::null_mut::<libc::c_void>(),
    ) != 0 as libc::c_int
    {
        cmd_free_argv(argc, argv);
        if !env.is_null() {
            environ_free(env);
        }
        free(cwd as *mut libc::c_void);
        free(title as *mut libc::c_void);
        return CMD_RETURN_NORMAL;
    }
    if !env.is_null() {
        environ_free(env);
    }
    free(cwd as *mut libc::c_void);
    free(title as *mut libc::c_void);
    cmd_free_argv(argc, argv);
    return CMD_RETURN_WAIT;
}
